From e1475a6693aac8cddc4bdd456548aa05a625556b Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 23 Nov 2010 19:36:14 +0000 Subject: [PATCH] tools/xl: show shutdown reason code, improve xl list heading Previously, xl list would not reveal the shutdown reason code unless it was SHUTDOWN_crashed. This is unfortunate; it makes it hard for scripts which use xl to tell what's going on. In this patch: * xl list shows the reason code as a single letter if it is any of the defined values from sched.h: - poweroff or domain not shut down r reboot s suspend c crashed w watchdog This is not 100% backward-compatible with xm but I think it's a justifiable improvement. It would be nice to make the same change to xm. * xl list -v shows the full numeric reason code in hex, or "-" if the domain is not shut down. * xl list -v has column headings for the UUID and numeric reason code. The heading for the reason code overlaps with the UUID a bit. These headings are intended for human readers; scripts can parse the output by breaking on whitespace. Signed-off-by: Ian Jackson --- tools/libxl/xl_cmdimpl.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 5ff933bcb7..555531922a 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -2484,11 +2484,16 @@ static void list_domains_details(const libxl_dominfo *info, int nb_domain) static void list_domains(int verbose, const libxl_dominfo *info, int nb_domain) { int i; + static const char shutdown_reason_letters[]= "-rscw"; - printf("Name ID Mem VCPUs\tState\tTime(s)\n"); + printf("Name ID Mem VCPUs\tState\tTime(s)"); + if (verbose) printf(" UUID Reason-Code"); + printf("\n"); for (i = 0; i < nb_domain; i++) { char *domname; + unsigned shutdown_reason; domname = libxl_domid_to_name(&ctx, info[i].domid); + shutdown_reason = info[i].shutdown ? info[i].shutdown_reason : 0; printf("%-40s %5d %5lu %5d %c%c%c%c%c%c %8.1f", domname, info[i].domid, @@ -2498,12 +2503,17 @@ static void list_domains(int verbose, const libxl_dominfo *info, int nb_domain) info[i].blocked ? 'b' : '-', info[i].paused ? 'p' : '-', info[i].shutdown ? 's' : '-', - info[i].shutdown_reason == SHUTDOWN_crash ? 'c' : '-', + (shutdown_reason >= 0 && + shutdown_reason < sizeof(shutdown_reason_letters)-1 + ? shutdown_reason_letters[shutdown_reason] : '?'), info[i].dying ? 'd' : '-', ((float)info[i].cpu_time / 1e9)); free(domname); - if (verbose) + if (verbose) { printf(" " LIBXL_UUID_FMT, LIBXL_UUID_BYTES(info[i].uuid)); + if (info[i].shutdown) printf(" %8x", shutdown_reason); + else printf(" %8s", "-"); + } putchar('\n'); } } -- 2.30.2